package br.com.gecandango.service.impl;

import java.util.LinkedList;
import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import br.com.gecandango.beans.FichaSaude;
import br.com.gecandango.beans.Socio;
import br.com.gecandango.service.SocioService;

public class SocioServiceImpl extends HibernateDaoSupport implements
	SocioService {
	public Socio save(Socio bean) {
		Long id;
		FichaSaude fichaSaude = bean.getFichaSaude();
		bean.setFichaSaude(null);
		if(bean.getId()==null){
			id =  (Long)getHibernateTemplate().save(bean);
			bean.setId(id);
		} else {
			getHibernateTemplate().saveOrUpdate(bean);
		}
		fichaSaude.setSocio(bean);
		bean.setFichaSaude(saveFichaSaude(fichaSaude));
		getHibernateTemplate().saveOrUpdate(bean);
		return bean;
	}
	public List<Socio> list() {
		return getHibernateTemplate().find("from Socio");
	}
	public Socio find(Long id) {
		List<Socio> e = (List<Socio>)getHibernateTemplate().find("from Socio where id=?", id);
		return e.get(0);
	}
	public List<Socio> find(Socio socio) {
		List<Object> lista = new LinkedList<Object>();
		if(socio.getNome()==null){
			socio.setNome("");
		}
		String sql  = "from Socio s where s.nome like ?";
		lista.add((String)"%"+socio.getNome()+"%");
		if(socio.getReg_ueb() != null && !socio.getReg_ueb().trim().equals("")){
			sql += " and s.reg_ueb=?";//, id
			lista.add((String) socio.getReg_ueb()+"%");
		}
		if(socio.getAno_ingresso() != null && !socio.getAno_ingresso().trim().equals("")){
			sql += " and s.ano_ingresso=?";//, id
			lista.add((String) socio.getAno_ingresso());
		}
		if(socio.getAno_ultimo_registro() != null && !socio.getAno_ultimo_registro().trim().equals("")){
			sql += " and s.ano_ultimo_registro=?";//, id
			lista.add((String) socio.getAno_ultimo_registro());
		}
		if(socio.getCategoria() != null && !socio.getCategoria().trim().equals("")){
			sql += " and s.categoria=?";
			lista.add((String) socio.getCategoria());
			sql += " or s.categoria2=?";
			lista.add((String) socio.getCategoria());
		}
		if(socio.getFuncao() != null && !socio.getFuncao().trim().equals("")){
			sql += " and s.funcao=?";
			lista.add((String) socio.getFuncao());
			sql += "or s.funcao2=?";
			lista.add((String) socio.getFuncao());
		}
		if(socio.getRamo() != null && !socio.getRamo().trim().equals("")){
			sql += " and s.ramo=?";
			lista.add((String) socio.getRamo());
			sql += " or s.ramo2=?";
			lista.add((String) socio.getRamo());
		}
		logger.info("SQL: "+sql);
		return (List<Socio>)getHibernateTemplate().find(sql, converterParaArrayDeObjetos(lista));
	} 
	
	
	public void delete(Socio bean) {
		getHibernateTemplate().delete(bean);
	}
	public FichaSaude saveFichaSaude(FichaSaude bean) {
		Long id;
		if(bean.getId()==null){
			id =  (Long)getHibernateTemplate().save(bean);
			bean.setId(id);
		} else {
			getHibernateTemplate().saveOrUpdate(bean);
		}
		return bean;
	}
	private Object[] converterParaArrayDeObjetos(List lista){
		Object[] valores = new Object[lista.size()];
		int qnt = 0;
		for (Object valor : lista) {
			valores[qnt] = valor;
			qnt++;
		}
		return valores;
	}
}
